package som;

public class Neuronio {

	private double[] coordenadasNeuronio;
	private int classe;

	public Neuronio(int dimensao, int classe) {

		this.coordenadasNeuronio = new double[dimensao];
		this.classe = classe;

		inicializaCoordenadas();
	}

	private void inicializaCoordenadas() {

		for (int i = 0; i < coordenadasNeuronio.length; i++) {

			coordenadasNeuronio[i] = 0;
		}
	}

	public double distanciaEuclidiana(double[] coordenadasDado) {

		double somatoria = 0;

		for (int i = 0; i < coordenadasNeuronio.length; i++) {

			double diferenca = coordenadasDado[i] - coordenadasNeuronio[i];

			somatoria = somatoria + Math.pow(diferenca, 2);
		}

		return Math.round(Math.sqrt(somatoria));
	}

	public void aproximaNeuronio(double[] coordenadasDado, double taxaAprendizagem) {

		for (int i = 0; i < coordenadasNeuronio.length; i++) {

			double novo = (coordenadasDado[i] - coordenadasNeuronio[i]) * taxaAprendizagem;
			coordenadasNeuronio[i] = coordenadasNeuronio[i] + novo;
		}
	}

	public void afastaNeuronio(double[] coordenadasDado, double taxaAprendizagem) {

		for (int i = 0; i < coordenadasNeuronio.length; i++) {

			double novo = (coordenadasDado[i] - coordenadasNeuronio[i]) * taxaAprendizagem;
			coordenadasNeuronio[i] = coordenadasNeuronio[i] - novo;
		}
	}

	public int obtemClasse() {

		return classe;
	}
}
